package org.xin.framework.base.service;

import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.cache.annotation.Cacheable;
import org.xin.framework.base.pojo.form.SearchForm;
import org.xin.framework.config.PageHelper;
import java.util.List;


/**
 * @author ：xin
 * @date ：Created in 2021/9/29
 * @desc <p>  </p>
 * @modified By：$
 * @version: $
 */
public interface IBaseService<DOMAIN> extends IService<DOMAIN> {
    /**
     * @desc <p> 根据父节ID获取其子节点集合 </p>
     * @author xin
     * @date 2021/10/6
     */
    List<DOMAIN> children(String parentId);

    /**
     * @desc <p> 高级搜索
     * clazz 是用来当做缓存键值的
     * </p>
     * @author xin
     * @date 2021/10/1
     */
    PageHelper<DOMAIN> search(JSONObject object, Class<?> clazz);

    /**
     * @desc <p> 高级搜索 </p>
     * @author xin
     * @date 2021/10/1
     */
    PageHelper<DOMAIN> search(JSONObject object);
    /**
     * @description: 分页
     * @remarks:
     * @author Long
     * @date 2021/5/26 8:54
     */
    PageHelper<DOMAIN> page(Integer page, Integer limit);

    /**
     * @desc <p> 分页查询 </p>
     * @author xin
     * @date 2021/9/30
     */
    PageHelper<DOMAIN> pageSearch(Integer page, Integer limit, DOMAIN domain);

    /**
     * @desc <p> 分页查询/高级查询 </p>
     * @author xin
     * @date 2021/9/30
     */
    PageHelper<DOMAIN> pageForms(Integer page, Integer limit, List<SearchForm> forms);

    /**
     * @desc <p> 分页查询/高级查询 </p>
     * @author xin
     * @date 2021/9/30
     */
    PageHelper<DOMAIN> pageSearchForms(Integer page, Integer limit, DOMAIN domain, List<SearchForm> forms);

    /**
     * @desc <p> 缓存名称 临时使用 </p>
     * @author xin
     * @date 2021/10/9
     */
    Class<?> getDomainClass();
}
